package com.example.framework.common.util;

import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.AES;

public class EncryptUtils {

    /**
     * AES 加密
     *
     * @param content 待加密的内容
     * @param secret  key，必须为16位
     * @return 加密后的内容
     */
    public static String AesEncrypt(String content, String secret) {
        if (ObjectUtil.isEmpty(content)) {
            return content;
        }
        // ECB: 同样的原文生成同样的密文，作为数据库唯一索引需要
        // PKCS5Padding: 数据块的大小为8位, 不够就补足
        // iv：偏移量，ECB模式不需要，CBC模式下必须为16位
        AES aes = new AES(Mode.ECB, Padding.PKCS5Padding, secret.getBytes());
        // 加密为16进制表示
        return aes.encryptHex(content);
    }

    /**
     * AES 解密
     *
     * @param encryptHex 待解密的密文
     * @param secret     key，必须为16位
     * @return 解密后的明文
     */
    public static String AesDecrypt(String encryptHex, String secret) {
        if (ObjectUtil.isEmpty(encryptHex)) {
            return encryptHex;
        }
        // 构建
        AES aes = new AES(Mode.ECB, Padding.PKCS5Padding, secret.getBytes());
        // 解密为字符串
        return aes.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);
    }

}
